unit Unit1; 

{$mode objfpc}{$H+}
interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  pqconnection, sqldb, Menus, db, DBGrids, StdCtrls, DateUtils, Process,
  ComCtrls, LR_Class, LR_DBSet, Impresores, lNetComponents, lNet, ExtCtrls;

type
  config = record
    codigo_sucursal : string[3];
    host : string[50];
    db : string[20];
    user : string[20];
    passwd : string[20];
    ip_impresor : string[15];
    tipo_impresor : string[20];
  end;

  type
    security = record
      archivo : boolean;
      mantenimiento_datos : boolean;
      stock : boolean;
      servicios : boolean;
      facturacion : boolean;
      fiscal : boolean;
      administracion : boolean;
      ver_ventas : boolean;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    Datasource1: TDatasource;
    Datasource2: TDatasource;
    DBGrid1: TDBGrid;
    Edit1: TEdit;
    frDBDataSet1: TfrDBDataSet;
    frReport1: TfrReport;
    GroupBox1: TGroupBox;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    LTCP: TLTCPComponent;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem10: TMenuItem;
    MenuItem11: TMenuItem;
    MenuItem12: TMenuItem;
    MenuItem13: TMenuItem;
    MenuItem14: TMenuItem;
    MenuItem15: TMenuItem;
    MenuItem16: TMenuItem;
    MenuItem17: TMenuItem;
    MenuItem18: TMenuItem;
    MenuItem19: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem20: TMenuItem;
    MenuItem21: TMenuItem;
    MenuItem22: TMenuItem;
    MenuItem23: TMenuItem;
    MenuItem24: TMenuItem;
    MenuItem25: TMenuItem;
    MenuItem26: TMenuItem;
    MenuItem27: TMenuItem;
    MenuItem28: TMenuItem;
    MenuItem29: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem30: TMenuItem;
    MenuItem31: TMenuItem;
    MenuItem32: TMenuItem;
    MenuItem33: TMenuItem;
    MenuItem34: TMenuItem;
    MenuItem35: TMenuItem;
    MenuItem36: TMenuItem;
    MenuItem37: TMenuItem;
    MenuItem38: TMenuItem;
    MenuItem39: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem40: TMenuItem;
    MenuItem41: TMenuItem;
    MenuItem42: TMenuItem;
    MenuItem43: TMenuItem;
    MenuItem44: TMenuItem;
    MenuItem45: TMenuItem;
    MenuItem46: TMenuItem;
    MenuItem47: TMenuItem;
    MenuItem48: TMenuItem;
    MenuItem49: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem50: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    MenuItem9: TMenuItem;
    OpenDialog1: TOpenDialog;
    PQConnection1: TPQConnection;
    SQLQuery1: TSQLQuery;
    SQLQuery2: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    StatusBar1: TStatusBar;
    procedure DBGrid1CellClick(Column: TColumn);
    procedure FormDblClick(Sender: TObject);
    procedure FormShow;
    procedure frReport1GetValue(const ParName: String; var ParValue: Variant);
    procedure Label1Click(Sender: TObject);
    procedure LTCPReceive(aSocket: TLSocket);
    procedure MenuItem16Click(Sender: TObject);
    procedure MenuItem17Click(Sender: TObject);
    procedure MenuItem23Click(Sender: TObject);
    procedure MenuItem25Click(Sender: TObject);
    procedure MenuItem26Click(Sender: TObject);
    procedure MenuItem27Click(Sender: TObject);
    procedure MenuItem28Click(Sender: TObject);
    procedure MenuItem29Click(Sender: TObject);
    procedure MenuItem32Click(Sender: TObject);
    procedure MenuItem30Click(Sender: TObject);
    procedure MenuItem31Click(Sender: TObject);
    procedure MenuItem33Click(Sender: TObject);
    procedure MenuItem35Click(Sender: TObject);
    procedure MenuItem36Click(Sender: TObject);
    procedure MenuItem37Click(Sender: TObject);
    procedure MenuItem38Click(Sender: TObject);
    procedure MenuItem39Click(Sender: TObject);
    procedure MenuItem40Click(Sender: TObject);
    procedure MenuItem41Click(Sender: TObject);
    procedure MenuItem42Click(Sender: TObject);
    procedure MenuItem43Click(Sender: TObject);
    procedure MenuItem44Click(Sender: TObject);
    procedure MenuItem46Click(Sender: TObject);
    procedure MenuItem47Click(Sender: TObject);
    procedure MenuItem48Click(Sender: TObject);
    procedure MenuItem49Click(Sender: TObject);
    procedure MenuItem50Click(Sender: TObject);
    procedure ordenar_grid();
    procedure MenuItem10Click(Sender: TObject);
    procedure MenuItem12Click(Sender: TObject);
    procedure MenuItem13Click(Sender: TObject);
    procedure MenuItem15Click(Sender: TObject);
    procedure MenuItem19Click(Sender: TObject);
    procedure MenuItem21Click(Sender: TObject);
    procedure MenuItem22Click(Sender: TObject);
    procedure MenuItem3Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem5Click(Sender: TObject);
    procedure MenuItem6Click(Sender: TObject);
    procedure MenuItem7Click(Sender: TObject);
    procedure MenuItem8Click(Sender: TObject);
  private
    total_ventas : string;
    nombre_sucursal : string;
    funcionario : string;
    broker : string;
    fecha_desde : String;
    fecha_hasta : String;
    cliente : String;
    direccion : String;
    codigo : string;
    fecha : string;
    tipo : string;
    iva : string;
    cuit : string;
    total : string;
    detalle : string;
    descuento : string;
    resp_iva : string;
    cd_rtc_cant : real;
    cd_rtc_total : real;
    cd_cant : real;
    cd_total : real;
    cd_cant_efectivo : real;
    cd_total_efectivo : real;
    cd_cant_ctacte : real;
    cd_total_ctacte : real;
    cd_cant_tarjeta : real;
    cd_total_tarjeta : real;
    cd_cant_debito : real;
    cd_total_debito : real;
    cd_cant_cheque : real;
    cd_total_cheque : real;
    cd_cant_pgo : real;
    cd_total_pgo : real;
    cd_cant_pgo_efectivo : real;
    cd_total_pgo_efectivo : real;
    cd_cant_pgo_debito : real;
    cd_total_pgo_debito : real;
    cd_cant_pgo_cheque : real;
    cd_total_pgo_cheque : real;
    cd_cant_pgo_tarjeta : real;
    cd_total_pgo_tarjeta : real;
    inicio : string;
    fin : string;
    operacion : char;
    nro_conexion : string;
    archivo_fiscal : string;
    paso : longint;
    iva_desde : string;
    iva_hasta : string;
    filtrar_saldo : string;
    rfecha_desde : string;
    rfecha_hasta : string;
    rnombre_cliente : string;
    rcodigo_cliente : string;
    rcuit_cliente : string;
  public
    mi_sucursal : string;
  end;

var
  Form1: TForm1;
  archivo : file of config;
  registro : config;
  segfile : file of security;
  seguridad : security;
  impresor_fiscal : TImpresorFiscal;

const
  PuertoTCP = 1313;
  
implementation

uses
  Unit2, Unit5, Unit8, Unit11, Unit15, Unit18, Unit24, Unit25, Unit35, Unit22, Unit38, Unit39, Unit40,
  Unit41, Unit42, Unit45, Unit48, Unit51, Unit52, Unit55, Unit37, Unit60, Unit36;

{ TForm1 }

procedure TForm1.ordenar_grid();
begin
  total_ventas := '0';

  if SQLQuery1.Active = True then
    SQLQuery1.Close;

  if broker <> '' then
    SQLQuery1.SQL.Text := 'select vta_cdg, vta_fecha, vta_hora, vta_tipo, cln_nombre, '
      + 'suc_nombre, fnc_nombre, broker, vta_total, momento, cln_iva, cln_cuit, vta_total_iva, vta_saldo from vw_venta where momento >= '''
      + fecha_desde + ''' and momento <= ''' + fecha_hasta + ''' and cln_nombre ilike ''%' + cliente
      + '%'' and vta_tipo like ''%' + tipo + '%'' and fnc_nombre ilike ''%' + funcionario
      + '%'' and suc_nombre like ''' + nombre_sucursal + ''' and broker ilike ''%' + broker
      + '%'' and cln_iva like ''' + resp_iva + ''' ' + filtrar_saldo + 'order by vta_fecha, vta_cdg'
  else
  SQLQuery1.SQL.Text := 'select vta_cdg, vta_fecha, vta_hora, vta_tipo, cln_nombre, '
    + 'suc_nombre, fnc_nombre, broker, vta_total, momento, cln_iva, cln_cuit, vta_total_iva, vta_saldo from vw_venta where momento >= '''
    + fecha_desde + ''' and momento <= ''' + fecha_hasta + ''' and cln_nombre ilike ''%' + cliente
    + '%'' and vta_tipo like ''%' + tipo + '%'' and fnc_nombre ilike ''%' + funcionario
    + '%'' and suc_nombre like ''' + nombre_sucursal + ''' and cln_iva like ''' + resp_iva + ''''
    + filtrar_saldo + 'order by vta_fecha, vta_cdg';

  SQLQuery1.Open;

  while not SQLQuery1.EOF do
  begin
    total_ventas := floatTostr(strTofloat(total_ventas) + SQLQuery1.Fields[8].AsFloat);
    SQLQuery1.Next;
  end;

  total_ventas := FormatFloat('$ ###0.00', strTofloat(total_ventas));
  Edit1.Text := total_ventas;

  DBGrid1.Columns[0].Title.Caption := 'Código';
  DBGrid1.Columns[1].Title.Caption := 'Fecha';
  DBGrid1.Columns[2].Title.Caption := 'Hora';
  DBGrid1.Columns[3].Title.Caption := 'Tipo';
  DBGrid1.Columns[4].Title.Caption := 'Cliente';
  DBGrid1.Columns[5].Title.Caption := 'Sucursal';
  DBGrid1.Columns[6].Title.Caption := 'Vendedor';
  DBGrid1.Columns[7].Title.Caption := 'Broker';
  DBGrid1.Columns[8].Title.Caption := 'Total';
  DBGrid1.Columns[13].Title.Caption := '(Saldo)';
  
  DBGrid1.Columns[9].Visible := false;
  DBGrid1.Columns[10].Visible := false;
  DBGrid1.Columns[11].Visible := false;
  DBGrid1.Columns[12].Visible := false;

  DBGrid1.Columns[0].Width := 60;
  DBGrid1.Columns[1].Width := 100;
  DBGrid1.Columns[2].Width := 100;
  DBGrid1.Columns[3].Width := 80;
  DBGrid1.Columns[4].Width := 150;
  DBGrid1.Columns[5].Width := 120;
  DBGrid1.Columns[6].Width := 125;
  DBGrid1.Columns[7].Width := 125;
  DBGrid1.Columns[8].Width := 80;
  DBGrid1.Columns[13].Width := 80;

  DBGrid1.Columns[13].Font.Color := clRed;
  TColumn(DBGrid1.Columns[8]).DisplayFormat := '$ ####0.00';
  TColumn(DBGrid1.Columns[13]).DisplayFormat := '($ ####0.00)';

end;

procedure TForm1.MenuItem4Click(Sender: TObject);
begin
  Form2.ShowModal;
end;

procedure TForm1.MenuItem5Click(Sender: TObject);
begin
  Form5.ShowModal;
end;

procedure TForm1.MenuItem6Click(Sender: TObject);
begin
  Form8.ShowModal;
end;

procedure TForm1.MenuItem7Click(Sender: TObject);
begin
  Form11.ShowModal;
end;

procedure TForm1.MenuItem8Click(Sender: TObject);
begin
  Form15.ShowModal;
end;

procedure TForm1.MenuItem3Click(Sender: TObject);
begin
  ShowMessage('Realizar con regularidad el sistema de Backup');
  Close;
end;

procedure TForm1.MenuItem10Click(Sender: TObject);
begin
  Form18.ShowModal;
end;

procedure TForm1.FormShow;
begin
  if PQConnection1.Connected = False then
  begin
    if FileExists('configuracion.dat') = False then
    begin
      ShowMessage('SISTEMA SIN CONFIGURAR!');
      Form38.ShowModal;
    end;

    AssignFile(archivo, 'configuracion.dat');
    Reset(archivo);
    Read(archivo, registro);
    CloseFile(archivo);

    PQConnection1.HostName := registro.host;
    PQConnection1.DatabaseName := registro.db;
    PQConnection1.Username := registro.user;
    PQConnection1.Password := registro.passwd;

    PQConnection1.Connected := True;

    if SQLQuery2.Active = true then
      SQLQuery2.Close;

    SQLQuery2.SQL.Text := 'select suc_nombre from sucursal where suc_cdg = '
      + registro.codigo_sucursal;

    SQLQuery2.Open;

    while not SQLQuery2.EOF do
    begin
      mi_sucursal := SQLQuery2.Fields[0].AsString;
      SQLQuery2.Next;
    end;

    SQLQuery2.Close;
    
    StatusBar1.Panels[0].Width := 350;

    StatusBar1.Panels[1].Width := 300;
  end;


  if (registro.tipo_impresor = 'Hasar P715F') or (registro.tipo_impresor = 'Hasar PR4F') then
    MenuItem28.Visible := true
  else
    MenuItem28.Visible := false;
    
  if registro.tipo_impresor = 'Ninguno' then
    MenuItem24.Visible := false
  else
    MenuItem24.Visible := true;
    
  fecha_desde := DateToStr(Date) + ' ' + '00:00';
  fecha_hasta := DateToStr(Date) + ' ' + '23:59';
  cliente := '%';
  tipo := '%';
  funcionario := '%';
  broker := '';
  resp_iva := '%';
  nombre_sucursal := mi_sucursal;
  filtrar_saldo := '';
  
  StatusBar1.Panels[0].Text := 'Conectado!   Servidor: ' + registro.host + '   DB: ' + registro.db;

  StatusBar1.Panels[1].Text:= 'Impresor fiscal: ' + registro.tipo_impresor;

    if registro.tipo_impresor <> 'Ninguno' then
       StatusBar1.Panels[1].Text := StatusBar1.Panels[1].Text + ' en ' + registro.ip_impresor;

  StatusBar1.Panels[2].Text:= 'Sucursal: ' + nombre_sucursal;

  ordenar_grid;

  if FileExists('security.dat') = true then
  begin
    AssignFile(segfile, 'security.dat');
    Reset(segfile);
    Read(segfile, seguridad);
    CloseFile(segfile);

    MenuItem1.Enabled := seguridad.archivo;
    MenuItem2.Enabled := seguridad.mantenimiento_datos;
    MenuItem11.Enabled := seguridad.stock;
    MenuItem9.Enabled := seguridad.servicios;
    MenuItem14.Enabled := seguridad.facturacion;
    MenuItem24.Enabled := seguridad.fiscal;
    MenuItem34.Enabled := seguridad.administracion;
    GroupBox1.Visible := seguridad.ver_ventas;
  end
  else
  begin
    ShowMessage('Archivo de configuración de seguridad no encontrado!');
    Close;
  end;

end;

procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant
  );
begin
  if ParName = 'rcodigo_cliente' then
    ParValue := rcodigo_cliente;

  if ParName = 'rnombre_cliente' then
    ParValue := rnombre_cliente;

  if ParName = 'rcuit_cliente' then
    ParValue := rcuit_cliente;

  if ParName = 'rfecha_desde' then
    ParValue := rfecha_desde;

  if ParName = 'rfecha_hasta' then
    ParValue := rfecha_hasta;

  if ParName = 'cd_rtc_cant' then
    ParValue := cd_rtc_cant;
    
  if ParName = 'cd_rtc_total' then
    ParValue := cd_rtc_total;

  if ParName = 'cd_sucursal' then
  begin
    if nombre_sucursal = '%' then
      ParValue := 'Todas'
    else
     ParValue := nombre_sucursal;
  end;
    
  if ParName = 'cc_desde' then
    ParValue := inicio;

  if ParName = 'cc_hasta' then
    ParValue := fin;
    
  if ParName = 'fecha_desde' then
    ParValue := fecha_desde;
    
  if ParName = 'fecha_hasta' then
    ParValue := fecha_hasta;

  if ParName = 'detalle' then
    ParValue := detalle;

  if ParName = 'fecha' then
    ParValue := fecha;

  if ParName = 'total' then
    ParValue := total;

  if ParName = 'codigo' then
    ParValue := codigo;

  if ParName = 'cliente' then
    ParValue := cliente;

  if ParName = 'direccion' then
    ParValue := direccion;

  if ParName = 'cuit' then
    ParValue := cuit;

  if ParName = 'pago' then
    ParValue := tipo;

  if ParName = 'iva' then
    ParValue := iva;
    
  if ParName = 'descuento' then
    ParValue := descuento;
    
  if ParName = 'cd_cant' then
    ParValue := cd_cant;
    
  if ParName = 'cd_total' then
    ParValue := cd_total;
    
  if ParName = 'cd_cant_efectivo' then
    ParValue := cd_cant_efectivo;

  if ParName = 'cd_total_efectivo' then
    ParValue := cd_total_efectivo;
    
  if ParName = 'cd_cant_ctacte' then
    ParValue := cd_cant_ctacte;

  if ParName = 'cd_total_ctacte' then
    ParValue := cd_total_ctacte;
    
  if ParName = 'cd_cant_tarjeta' then
    ParValue := cd_cant_tarjeta;

  if ParName = 'cd_total_tarjeta' then
    ParValue := cd_total_tarjeta;

  if ParName = 'cd_cant_debito' then
    ParValue := cd_cant_debito;

  if ParName = 'cd_total_debito' then
    ParValue := cd_total_debito;

  if ParName = 'cd_cant_cheque' then
    ParValue := cd_cant_cheque;

  if ParName = 'cd_total_cheque' then
    ParValue := cd_total_cheque;
    
  if ParName = 'cd_cant_pgo' then
    ParValue := cd_cant_pgo;

  if ParName = 'cd_total_pgo' then
    ParValue := cd_total_pgo;

  if ParName = 'cd_cant_pgo_debito' then
    ParValue := cd_cant_pgo_debito;

  if ParName = 'cd_total_pgo_debito' then
    ParValue := cd_total_pgo_debito;

  if ParName = 'cd_cant_pgo_efectivo' then
    ParValue := cd_cant_pgo_efectivo;

  if ParName = 'cd_total_pgo_efectivo' then
    ParValue := cd_total_pgo_efectivo;
    
  if ParName = 'cd_cant_pgo_tarjeta' then
    ParValue := cd_cant_pgo_tarjeta;

  if ParName = 'cd_total_pgo_tarjeta' then
    ParValue := cd_total_pgo_tarjeta;

  if ParName = 'cd_cant_pgo_cheque' then
    ParValue := cd_cant_pgo_cheque;

  if ParName = 'cd_total_pgo_cheque' then
    ParValue := cd_total_pgo_cheque;

  if ParName = 'total_ventas' then
    ParValue := total_ventas;

  if ParName = 'funcionario' then
    ParValue := funcionario;

  if ParName = 'nombre_sucursal' then
    ParValue := nombre_sucursal;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
  end;

procedure TForm1.LTCPReceive(aSocket: TLSocket);
var
  mensaje : string;
  auxiliar : string;
  
begin
  if aSocket.GetMessage(mensaje) > 0 then
  begin
    case paso of
      1:
      begin
        nro_conexion := mensaje;
        LTCP.SendMessage('crear_archivo>' + nro_conexion);
        paso += 1;
      end;
      
      2:
      begin
        archivo_fiscal := mensaje;

        if operacion <> 'R' then
          auxiliar := impresor_fiscal.cierre_fiscal(operacion)
        else
          auxiliar := impresor_fiscal.reporte_iva(iva_desde, iva_hasta);

        LTCP.SendMessage('escribir>' + archivo_fiscal + '>' + auxiliar);
        paso += 1;
      end;
      
      3:
      begin
        LTCP.SendMessage('ejecutar_fiscal>' + archivo_fiscal);
        paso += 1;
      end;

      4:
      begin
        LTCP.SendMessage('borrar_archivo>' +  archivo_fiscal);
        paso += 1;
      end;

      5:
      begin
        LTCP.Disconnect;
      end;
    end;
  end;
end;

procedure TForm1.MenuItem16Click(Sender: TObject);
begin
  Form41.ShowModal;
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  if SQLQuery1.RecordCount > 0 then
  begin
    codigo := SQLQuery1.FieldByName('vta_cdg').AsString;
    fecha := SQLQuery1.FieldByName('vta_fecha').AsString;

    tipo := SQLQuery1.FieldByName('vta_tipo').AsString;

    if tipo = 'CONTADO' then
      tipo := 'Contado'
    else
    if tipo = 'CTACTE' then
      tipo := 'Cuenta Corriente'
    else
    if tipo = 'TARJETA' then
      tipo := 'Tarjeta de Crédito'
    else
      tipo := 'Cheque';
  
    cliente := SQLQuery1.FieldByName('cln_nombre').AsString;
    cuit := SQLQuery1.FieldByName('cln_cuit').AsString;
    total := SQLQuery1.FieldByName('vta_total').AsString;
  
    if SQLQuery2.Active = true then
      SQLQuery2.Close;
    
    SQLQuery2.SQL.Text := 'select vta_detalle from venta where vta_cdg = ' + codigo;
  
    SQLQuery2.Open;
  
    while not SQLQuery2.EOF do
    begin
      detalle := SQLQuery2.Fields[0].AsString;
      SQLQuery2.Next;
    end;
  
    SQLQuery2.Close;
  
    SQLQuery2.SQL.Text := 'select riva_descripcion from responsabilidad_iva where riva_cdg = '
      + '(select cln_iva from cliente where cln_cdg = (select vta_cliente from venta where vta_cdg = '
      + codigo + '))';
    
    SQLQuery2.Open;
  
    while not SQLQuery2.EOF do
    begin
      iva := SQLQuery2.Fields[0].AsString;
      SQLQuery2.Next;
    end;

    SQLQuery2.Close;

    SQLQuery2.SQL.Text := 'select vta_descuento from venta where vta_cdg = ' + codigo;

    SQLQuery2.Open;

    while not SQLQuery2.EOF do
    begin
      descuento := SQLQuery2.Fields[0].AsString;
      SQLQuery2.Next;
    end;
  
    SQLQuery2.Close;
  
    SQLQuery2.SQL.Text := 'select cln_direccion from cliente where cln_cdg = (select vta_cliente from '
      + 'venta where vta_cdg = ' + codigo + ')';

    SQLQuery2.Open;

    while not SQLQuery2.EOF do
    begin
      direccion := SQLQuery2.Fields[0].AsString;
      SQLQuery2.Next;
    end;
  
    SQLQuery2.Close;
  
    SQLQuery2.SQL.Text := 'select cantidad, prd_nombre, punitario, precio from vw_producto_venta '
      + 'where prv_venta = ' + codigo;

    SQLQuery2.Open;
  
    frDBDataSet1.DataSource := Datasource2;
    frReport1.LoadFromFile('resumen_venta.lrf');
    frReport1.ShowReport;
  
    SQLQuery2.Close;
  end;
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
  if seguridad.ver_ventas = true then
  begin
    if GroupBox1.Visible = true then
      GroupBox1.Visible := false
    else
      GroupBox1.Visible := true;
  end;
end;

procedure TForm1.MenuItem17Click(Sender: TObject);
var
  QueryString : string;
  vta_tipo : string;
  vta_total : string;
  vta_cliente : string;
  saldo_cliente : string;

begin
  codigo := InputBox('Cancelar Venta', 'Ingrese el código de venta a cancelar:', '');
  
  if codigo <> '' then
  begin
    if SQLQuery2.Active = true then
      SQLQuery2.Close;

    SQLQuery2.SQL.Text := 'select vta_tipo, vta_total, vta_cliente from venta where vta_cdg = ' + codigo;

    SQLQuery2.Open;

    while not SQLQuery2.EOF do
    begin
      vta_tipo := SQLQuery2.Fields[0].AsString;
      vta_total := SQLQuery2.Fields[1].AsString;
      vta_cliente := SQLQuery2.Fields[2].AsString;
      SQLQuery2.Next;
    end;

    SQLQuery2.Close;

    QueryString := 'delete from venta where vta_cdg = ' + codigo;
    
    PQConnection1.ExecuteDirect('begin work;');
    PQConnection1.ExecuteDirect(QueryString);
    PQConnection1.ExecuteDirect('commit work;');

    if vta_tipo = 'CTACTE' then
    begin
      QueryString := 'insert into resumen_cuenta(rsm_cliente, rsm_descripcion, rsm_operacion, rsm_haber) values('
        + vta_cliente + ', ''CANCELACION COMPRA'', ' + codigo + ', ' + vta_total + ')';

      PQConnection1.ExecuteDirect('begin work;');
      PQConnection1.ExecuteDirect(QueryString);
      PQConnection1.ExecuteDirect('commit work;');
    end;

    ShowMessage('Cancelación Exitosa');

    ordenar_grid();
  end;
end;

procedure TForm1.MenuItem23Click(Sender: TObject);
begin
  cliente := InputBox('Filtro por Cliente', 'Ingrese parte del nombre del cliente:', '');
  
  if cliente <> '' then
    ordenar_grid;
end;

procedure TForm1.MenuItem25Click(Sender: TObject);
begin
  nro_conexion := '';
  archivo_fiscal := '';
  paso := 1;
  operacion := 'X';
  
  LTCP.Connect(registro.ip_impresor, puertoTCP);
end;

procedure TForm1.MenuItem26Click(Sender: TObject);
begin
  nro_conexion := '';
  archivo_fiscal := '';
  paso := 1;
  operacion := 'Z';

  LTCP.Connect(registro.ip_impresor, puertoTCP);
end;

procedure TForm1.MenuItem27Click(Sender: TObject);
var
  old_host : string;
  old_db : string;
  old_user : string;
  old_passwd : string;
    
begin
  old_host := registro.host;
  old_db := registro.db;
  old_user := registro.user;
  old_passwd := registro.passwd;

  Form38.ShowModal;

  if (old_host <> Form38.Edit1.Text) or (old_db <> Form38.Edit2.Text)
    or (old_user <> Form38.Edit3.Text) or (old_passwd <> Form38.Edit4.Text) then
    ShowMessage('REINICIE EL PROGRAMA PARA HACER EFECTIVOS LOS CAMBIOS');

  FormShow;
end;

procedure TForm1.MenuItem28Click(Sender: TObject);
begin
  Form39.ShowModal;
end;

procedure TForm1.MenuItem29Click(Sender: TObject);
begin
  Form45.ShowModal;
end;

procedure TForm1.MenuItem32Click(Sender: TObject);
begin
  if SQLQuery2.Active = true then
    SQLQuery2.Close;

  Form22.ShowModal;
  
  inicio := Form22.fecha_desde;
  fin := Form22.fecha_hasta;
  
  Form55.ShowModal;
  
  nombre_sucursal := Form55.nombre_sucursal;
  
  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count (rtc_cdg), sum(rtc_monto) from retiro_caja '
      + 'where rtc_fecha >= ''' + inicio + ''' and rtc_fecha <= ''' + fin + ''''
  else
    SQLQuery2.SQL.Text := 'select count (rtc_cdg), sum(rtc_monto) from retiro_caja '
      + 'where rtc_fecha >= ''' + inicio + ''' and rtc_fecha <= ''' + fin
      + ''' and rtc_sucursal = (select suc_cdg from sucursal where suc_nombre = '''
      + nombre_sucursal + ''')';

  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_rtc_cant := SQLQuery2.Fields[0].AsFloat;
    cd_rtc_total := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;
  
  SQLQuery2.Close;

  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin + ''''
  else
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_sucursal = (select suc_cdg from sucursal where suc_nombre = '''
      + nombre_sucursal + ''')';
    
  SQLQuery2.Open;
  
  while not SQLQuery2.EOF do
  begin
    cd_cant := SQLQuery2.Fields[0].AsFloat;
    cd_total := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;
  
  SQLQuery2.Close;
  
  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin + ''''
  else
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
      + ''' and pgo_sucursal = (select suc_cdg from sucursal where suc_nombre = '''
      + nombre_sucursal + ''')';


  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_pgo := SQLQuery2.Fields[0].AsFloat;
    cd_total_pgo := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;
  
  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''CONTADO'''
  else
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
     + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''CONTADO'' and vta_sucursal = '
      + '(select suc_cdg from sucursal where suc_nombre = ''' + nombre_sucursal + ''')';


  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_efectivo := SQLQuery2.Fields[0].AsFloat;
    cd_total_efectivo := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;

  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''DEBITO'''
  else
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
     + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''DEBITO'' and vta_sucursal = '
      + '(select suc_cdg from sucursal where suc_nombre = ''' + nombre_sucursal + ''')';


  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_debito := SQLQuery2.Fields[0].AsFloat;
    cd_total_debito := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;
  
  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
      + ''' and pgo_tipo = ''CONTADO'''
  else
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
      + ''' and pgo_tipo = ''CONTADO'' and pgo_sucursal = (select suc_cdg from sucursal '
      + 'where suc_nombre = ''' + nombre_sucursal + ''')';

  SQLQuery2.Close;

  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
      + ''' and pgo_tipo = ''DEBITO'''
  else
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
      + ''' and pgo_tipo = ''DEBITO'' and pgo_sucursal = (select suc_cdg from sucursal '
      + 'where suc_nombre = ''' + nombre_sucursal + ''')';

  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_pgo_debito := SQLQuery2.Fields[0].AsFloat;
    cd_total_pgo_debito := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;
  
  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''CTACTE'''
  else
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''CTACTE'' and vta_sucursal = (select suc_cdg from sucursal '
      + 'where suc_nombre = ''' + nombre_sucursal + ''')';


  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_ctacte := SQLQuery2.Fields[0].AsFloat;
    cd_total_ctacte := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;
  
  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''TARJETA'''
  else
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''TARJETA'' and vta_sucursal = (select suc_cdg from sucursal where '
      + 'suc_nombre = ''' + nombre_sucursal + ''')';


  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_tarjeta := SQLQuery2.Fields[0].AsFloat;
    cd_total_tarjeta := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;
  
  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
    + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
    + ''' and pgo_tipo = ''TARJETA'''
  else
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
      + ''' and pgo_tipo = ''TARJETA'' and pgo_sucursal = (select suc_cdg from sucursal where '
      + 'suc_nombre = ''' + nombre_sucursal + ''')';


  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_pgo_tarjeta := SQLQuery2.Fields[0].AsFloat;
    cd_total_pgo_tarjeta := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;
  
  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''CHEQUE'''
  else
    SQLQuery2.SQL.Text := 'select count(vta_cdg), sum(vta_total) '
      + 'from venta where vta_fecha >= ''' + inicio + ''' and vta_fecha <= ''' + fin
      + ''' and vta_tipo = ''CHEQUE'' and vta_sucursal = (select suc_cdg from sucursal where '
      + 'suc_nombre = ''' + nombre_sucursal + ''')';


  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_cheque := SQLQuery2.Fields[0].AsFloat;
    cd_total_cheque := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;

  if nombre_sucursal = '%' then
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
      + ''' and pgo_tipo = ''CHEQUE'''
  else
    SQLQuery2.SQL.Text := 'select count(pgo_cdg), sum(pgo_monto) '
      + 'from pago where pgo_fecha >= ''' + inicio + ''' and pgo_fecha <= ''' + fin
      + ''' and pgo_tipo = ''CHEQUE'' and pgo_sucursal = (select suc_cdg from sucursal where '
      + 'suc_nombre = ''' + nombre_sucursal + ''')';


  SQLQuery2.Open;

  while not SQLQuery2.EOF do
  begin
    cd_cant_pgo_cheque := SQLQuery2.Fields[0].AsFloat;
    cd_total_pgo_cheque := SQLQuery2.Fields[1].AsFloat;
    SQLQuery2.Next;
  end;

  SQLQuery2.Close;
  
  frReport1.LoadFromFile('cierre_caja.lrf');
  frReport1.ShowReport;
  
  FormShow;
end;

procedure TForm1.MenuItem30Click(Sender: TObject);
begin
  frDBDataSet1.DataSource := Datasource1;
  frReport1.LoadFromFile('listado_ventas.lrf');
  frReport1.ShowReport;
end;

procedure TForm1.MenuItem31Click(Sender: TObject);
begin
  Form40.ShowModal;
  tipo := Form40.tipo;
  ordenar_grid;
end;

procedure TForm1.MenuItem33Click(Sender: TObject);
begin
  frReport1.Clear;
  frReport1.DesignReport;
end;

procedure TForm1.MenuItem35Click(Sender: TObject);
begin
  Form42.ShowModal;
  ordenar_grid();
end;

procedure TForm1.MenuItem36Click(Sender: TObject);
begin
  Form48.ShowModal;
end;

procedure TForm1.MenuItem37Click(Sender: TObject);
begin
  Form51.ShowModal;
  
  funcionario := Form51.funcionario;
  
  ordenar_grid();
end;

procedure TForm1.MenuItem38Click(Sender: TObject);
begin
  Form52.ShowModal;

  ordenar_grid();
end;

procedure TForm1.MenuItem39Click(Sender: TObject);
begin
  Form55.ShowModal;
  
  nombre_sucursal := Form55.nombre_sucursal;
  
  if nombre_sucursal = '%' then
    StatusBar1.Panels[2].Text:= 'Sucursal: Todas'
  else
    StatusBar1.Panels[2].Text:= 'Pta. de Venta: ' + nombre_sucursal;
  
  ordenar_grid;
end;

procedure TForm1.MenuItem40Click(Sender: TObject);
var
  comando : string;
  archivo : string;
  proceso : TProcess;

begin
  OpenDialog1.Filter := 'Archivos de Backup|.backup';
  OpenDialog1.Filename := 'Sigeco_' + FormatDateTime('ddmmyyyy', date)
    + '.backup';
  OpenDialog1.Execute;

  archivo := OpenDialog1.FileName;

  comando := '.\backup.bat ' + registro.passwd + ' '
    + registro.host + ' ' + registro.user + ' '
    + archivo + ' ' + registro.db;
  proceso := TProcess.Create(nil);
  proceso.CommandLine := comando;
  proceso.Options := proceso.Options + [poWaitOnExit];
  proceso.Execute;
  proceso.Free;
end;

procedure TForm1.MenuItem41Click(Sender: TObject);
begin
  Form22.ShowModal;

  iva_desde := FormatDateTime('yymmdd', Form22.Calendar1.DateTime);
  iva_hasta := FormatDateTime('yymmdd', Form22.Calendar2.DateTime);

  nro_conexion := '';
  archivo_fiscal := '';
  paso := 1;
  operacion := 'R';

  LTCP.Connect(registro.ip_impresor, puertoTCP);
end;

procedure TForm1.MenuItem42Click(Sender: TObject);
begin
  Form37.ShowModal;
end;

procedure TForm1.MenuItem43Click(Sender: TObject);
begin
  Form60.ShowModal;
end;

procedure TForm1.MenuItem44Click(Sender: TObject);
begin
  broker := InputBox('Filtro por Broker', 'Ingrese parte del nombre del broker:', '');

  if broker <> '' then
    ordenar_grid;
end;

procedure TForm1.MenuItem46Click(Sender: TObject);
begin
  Form37.ShowModal;
end;

procedure TForm1.MenuItem47Click(Sender: TObject);
begin
  Form37.por_codigo := true;
  Form37.ShowModal;
end;

procedure TForm1.MenuItem48Click(Sender: TObject);
begin
  resp_iva := 'I';
  ordenar_grid();
end;

procedure TForm1.MenuItem49Click(Sender: TObject);
begin
  filtrar_saldo := ' and vta_saldo > 0 ';
  ordenar_grid();
end;

procedure TForm1.MenuItem50Click(Sender: TObject);
begin
  Form36.ShowModal;
  rnombre_cliente := Form36.nombre;
  rcodigo_cliente := Form36.codigo;
  rcuit_cliente := Form36.cuit;

  Form22.ShowModal;
  rfecha_desde := Form22.fecha_desde;
  rfecha_hasta := Form22.fecha_hasta;

  if SQLQuery2.Active = true then
    SQLQuery2.Close;

  SQLQuery2.SQL.text := 'select * from vw_resumen_cuenta where rsm_cliente = ' + rcodigo_cliente;

  SQLQuery2.Open;

  frDBDataSet1.DataSource := Datasource2;
  frReport1.LoadFromFile('resumen_cuenta.lrf');
  frReport1.ShowReport;

  SQLQuery2.Close;
end;

procedure TForm1.MenuItem12Click(Sender: TObject);
begin
  Form24.ShowModal;
end;

procedure TForm1.MenuItem13Click(Sender: TObject);
begin
  Form25.ShowModal;
end;

procedure TForm1.MenuItem15Click(Sender: TObject);
begin
  Form35.ShowModal;
  FormShow;
end;

procedure TForm1.MenuItem19Click(Sender: TObject);
begin
  ShowMessage('SISTEMA DE GESTION COMERCIAL V. 2.5.0.0');
end;

procedure TForm1.MenuItem21Click(Sender: TObject);
begin
  Form22.Showmodal;
  
  fecha_desde := Form22.fecha_desde;
  fecha_hasta := Form22.fecha_hasta;
  
  ordenar_grid;
end;

procedure TForm1.MenuItem22Click(Sender: TObject);
begin
  FormShow;
end;

initialization
  {$I unit1.lrs}
  ThousandSeparator := ',';
  DecimalSeparator := '.';
  
end.

